观察者模式定义了对象之间的一对多依赖,观察者依赖于此主体,只要主体状态有变化,观察者就会被通知。
一种基于Subject和Observer接口的实现:
观察者模式提供了一种对象设计,让主题和观察者之间实现松耦合。
气象站的观察者模式设计:
实现代码:
1 | public interface Subject { |
1 | public class WeatherData implements Subject { |
同样,观察者模式也有缺点,观察者无法主动获取所需要的数据,而是由主题对象一次推送所有数据,在某些情况并不合适,后面介绍的模式将解决这个问题。
另外Java内置有观察者模式,但是是基于抽象类,而不是接口的实现,在很多时候并不适用。在JDK中,Swing的JButton等组件加入Listener即是使用了观察者模式,当按扭事件被触发时,所有listener将会得到通知并做出相应行为。